#include "totalcontrolform.h"
#include "ui_totalcontrolform.h"

#include "networkwidget.h"
#include "remotecontrolform.h"
#include "music_component.h"


TotalControlForm::TotalControlForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TotalControlForm)
{
    ui->setupUi(this);

    // 初始化所有功能界面实例（父对象设为当前窗口，避免内存泄漏）
    NetworkWidget *widgetInstance = new NetworkWidget(this);                // 初始化网络连接界面实例
    RemoteControlForm *remoteControlInstance = new RemoteControlForm(this); // 初始化智能家居界面实例
    weatherForecastInstance = new WeatherForecast(this);                    // 初始化天气预报界面实例
    pilotSignalInstance = new pilot_signal(this);                           // 初始化空调遥控界面实例（父对象设为当前窗口，避免内存泄漏）
    lamplightInstance = new lamplight(this);                                //初始化灯光界面实例（父对象设为当前窗口，避免内存泄漏）
    musicComponentInstance = new MusicComponent(this);                      // 初始化音乐组件实例
    aiqaWidgetInstance = new AiqaWidget(this);                              // 初始化AI问答界面实例

        // 打印添加前的页面数量
        qDebug() << "添加前页面数：" << ui->stackedWidget->count();

        // 向stackedWidget添加功能页面（顺序决定索引，叠加在初始2个空页面之后）
        // 注意：此时stackedWidget已有2个初始页面（索引0、1），新增页面索引从2开始
        ui->stackedWidget->addWidget(widgetInstance);           // 网络连接 → 索引2
        ui->stackedWidget->addWidget(remoteControlInstance);    // 智能家居 → 索引3
        ui->stackedWidget->addWidget(weatherForecastInstance);  // 天气预报 → 索引4
        ui->stackedWidget->addWidget(pilotSignalInstance);      // 空调遥控 → 索引5
        ui->stackedWidget->addWidget(lamplightInstance);        // 灯光界面 → 索引6
        ui->stackedWidget->addWidget(musicComponentInstance);   // 音乐界面 → 索引7
        ui->stackedWidget->addWidget(aiqaWidgetInstance);       // AI问答界面 → 索引8


        // 打印添加后的页面数量
        qDebug() << "添加后页面数：" << ui->stackedWidget->count();

        //1.当点击智能家居界面（RemoteControlForm）的 “进入网络连接” 按钮（pushButton_11）时，切换到网络连接界面（索引 2）并打印当前界面索引；
            connect(remoteControlInstance, &RemoteControlForm::switchToWidget, this, [this]()
            {
                ui->stackedWidget->setCurrentIndex(2); // 切换到 Widget 界面（索引 2）
                qDebug() << "接收到切换信号，当前索引：" << ui->stackedWidget->currentIndex();
            });
        // 2.当点击网络连接界面（NetworkWidget）的 “返回” 按钮时，切换回智能家居界面（索引 3）并打印当前界面索引；
            connect(widgetInstance, &NetworkWidget::switchToRemoteControl, this, [this]()
            {
                ui->stackedWidget->setCurrentIndex(3); // 切换到 RemoteControlForm 界面（索引 3）
                qDebug() << "接收到切换信号，当前索引：" << ui->stackedWidget->currentIndex();
            });
        //3.当点击智能家居界面的 “空调遥控” 按钮（pushButton_5）时，切换到空调遥控界面（索引 5）并打印当前界面索引；
                connect(remoteControlInstance, &RemoteControlForm::switchToPilotSignal, this, [this]()
                {
                    ui->stackedWidget->setCurrentIndex(5);
                    qDebug() << "切换到空调遥控界面，当前索引：" << ui->stackedWidget->currentIndex();
                });

        //4.当点击空调遥控界面（pilot_signal）的 “返回” 按钮时，切换回智能家居界面（索引 3）并打印当前界面索引；
            connect(pilotSignalInstance, &pilot_signal::switchToRemoteControlMain, this, [this]()
            {
                ui->stackedWidget->setCurrentIndex(3); // 智能家居界面在索引3
                qDebug() << "从空调遥控返回智能家居，当前索引：" << ui->stackedWidget->currentIndex();
            });
        // 5.当点击智能家居界面的 “灯光控制” 按钮（pushButton_6）时，切换到灯光界面（索引 6）并打印当前界面索引；
           connect(remoteControlInstance, &RemoteControlForm::switchToLamplight, this, [this]()
               {
                   ui->stackedWidget->setCurrentIndex(6); // 切换到灯光界面（索引6，与步骤10对应）
                   qDebug() << "切换到灯光界面，当前索引：" << ui->stackedWidget->currentIndex();
               });

        // 6. 当点击灯光界面（lamplight）的 “返回” 按钮（pushButton_7）时，切换回智能家居界面（索引 3）并打印当前界面索引。
           connect(lamplightInstance, &lamplight::switchToRemoteControlMain, this, [this]()
               {
                   ui->stackedWidget->setCurrentIndex(3); // 智能家居界面固定在索引3
                   qDebug() << "从灯光界面返回智能家居，当前索引：" << ui->stackedWidget->currentIndex();
               });

        //7. 将网络连接界面的连接状态（如 “已连接 / 未连接”）同步到智能家居界面，更新智能家居界面的状态标签和按钮启用状态；
            connect(widgetInstance, &NetworkWidget::connectionStatusChanged,
                    remoteControlInstance, &RemoteControlForm::updateConnectionStatus);

        //8.把智能家居界面 “离家 / 归家 / 睡眠 / 起床” 模式按钮的命令，转发给网络模块（NetworkWidget），由网络模块发送给远程设备；
            connect(remoteControlInstance, &RemoteControlForm::sendCommand, this, [widgetInstance](QString cmd)
            {
                // 调用NetworkWidget的公有接口发送命令（内部已处理模式判断）
                widgetInstance->sendCommand(cmd);
            });
         //9.将网络模块接收到的远程设备消息，转发给智能家居界面，让智能家居界面更新显示（如显示 “离家模式已启动”）；
            connect(widgetInstance, &NetworkWidget::receivedNetworkMessage,
                    remoteControlInstance, &RemoteControlForm::onNetworkMessageReceived);
            //10. 连接空调遥控的"发送温度"信号到NetworkWidget的"发送命令"接口
            connect(pilotSignalInstance, &pilot_signal::sendAirConditionerCmd,
                    this, [widgetInstance](QString cmd)
            {
                // 直接使用空调遥控界面发送的命令字符串
                // 不需要再转换，因为信号已经发送了格式化的命令
                widgetInstance->sendCommand(cmd);
            });
        // 10.将网络接收到的消息也转发给空调遥控界面
            connect(widgetInstance, &NetworkWidget::receivedNetworkMessage,
                    pilotSignalInstance, &pilot_signal::updateAirConditionerStatus);
        //11.将灯光控制的命令信号转发给网络模块
                connect(lamplightInstance, &lamplight::sendLamplightCmd,
                        this, [widgetInstance](QString cmd)
                {
                    // 调用NetworkWidget的sendCommand方法发送命令（自动适配TCP客户端/服务器模式）
                    widgetInstance->sendCommand(cmd);
                    // （可选）调试输出：打印发送的灯光命令
                    qDebug() << "[灯光控制] 发送命令：" << cmd;
                });
           // 12.将网络接收到的消息转发给灯光界面
            connect(widgetInstance, &NetworkWidget::receivedNetworkMessage,
                    lamplightInstance, &lamplight::onLampStatusReceived);
}

TotalControlForm::~TotalControlForm()
{
    delete ui;
}
//"智能家居按钮"进入remotecontrolform.ui（智能家居控制界面）
void TotalControlForm::on_pushButton_clicked()
{
    // 切换到索引为 3 的页面（RemoteControlForm 对应的界面）
    ui->stackedWidget->setCurrentIndex(3);
    qDebug() << "遥控按钮触发，当前索引：" << ui->stackedWidget->currentIndex();
}
//"天气预报按钮"进入weather_forecast.ui（天气预报控制界面）
void TotalControlForm::on_pushButton_2_clicked()
{
    // 切换到索引为 4 的页面（WeatherForecast 对应的界面）
    ui->stackedWidget->setCurrentIndex(4);
    qDebug() << "天气预报按钮触发，当前索引：" << ui->stackedWidget->currentIndex();
}
//"音乐按钮"进入music_component.ui（音乐界面）
void TotalControlForm::on_pushButton_3_clicked()
{
    // 切换到索引为 7 的页面（MusicComponent 对应的界面）
    ui->stackedWidget->setCurrentIndex(7);
    qDebug() << "音乐按钮触发，当前索引：" << ui->stackedWidget->currentIndex();
}
//AI问答按钮切换到AI问答界面
void TotalControlForm::on_pushButton_4_clicked()
{
    // 切换到索引为 8 的页面（AiqaWidget 对应的界面）
    ui->stackedWidget->setCurrentIndex(8);
    qDebug() << "AI问答按钮触发，当前索引：" << ui->stackedWidget->currentIndex();
}
